// index.js
const app = getApp()
const lvToast = require("../../utils/toastAndloading")
Page({
  data: {
    primaryColor: app.primaryColor, // 主题色
    timer: null,
    // tab 数据
    navList: [
      {
        name: '全部',
        value: '',
      },
      {
        name: '待分诊',
        value: -1,
      },
      {
        name: '待就诊',
        value: '1',
      },
      {
        name: '已到诊',
        value: '3',
      },
      {
        name: '未到诊',
        value: '2',
      },
    ],
    orgList: [], // 机构列表
    navBarHeight: '',
    checkNav: '', // 当前tab选中状态
    pageNo: 1, // 当前页数
    pageSize: 10, // 每页条数
    dataList: [], // 列表数据
    requestFlag: true, // 是否继续请求的标识，false-停止请求，true-继续请求，当返回的列表数量的length<pagesie时，说明后面已经没有数据了，停止继续请求
    scrollLeft: 0, // tab的值
    isLogin: false, // 当前登录状态
    logoutTimer: null, // 退出登录的定时器
    isLogoutBtn: false, // 是否点击了退出登录，节流
    chooseOrgName: '全部机构', // 机构名称
    chooseOrgCode: '', // 机构编码
    patientKw: '', // 搜索框
    changeOrgPicker: false, // 选择机构弹框的 picker
    debounceTimer: null // 防抖定时器-输入框
  },
  onLoad: function (options) {
    if (options.checkNav) {
      this.setData({
        checkNav: options.checkNav,
      })
    }
  },
  onShow () {
    const sys = getApp().globalSystemInfo || {};
    const heightNum = (sys.navBarHeight ? (sys.navBarHeight + (sys.navBarExtendHeight || 0)) : Number(app.globalData.navBarHeight)) || 0;
    this.setData({
      navBarHeight: heightNum + 'px',
      isLogin: app.globalData.loginStatus
    })
    this.mustGoLoginPage()
    this.initPage()
  },
  onReady () {
    this.setData({
      navBarHeight: Number(app.globalData.navBarHeight)+'px',
      isLogin: app.globalData.loginStatus
    })
  },
  onUnload() {
    this.setData({ isLogoutBtn: false })
    if (this.data.logoutTimer) clearTimeout(this.data.logoutTimer)
    if (this.data.debounceTimer) clearTimeout(this.data.debounceTimer)
  },
  onReachBottom () {
    if(this.data.requestFlag == false){
      return false;
    }
    const pageNo = this.data.pageNo + 1
    this.setData({ pageNo })
    this.getListData();
  },
  onPullDownRefresh () {
    this.getList_fn()
    // 停止下拉动作
    wx.stopPullDownRefresh();
  },
  // 退出登录
  loginOut () {
    if (this.data.isLogoutBtn) return
    this.setData({ isLogoutBtn: true })
    lvToast.showLoading('退出中')
    app.api.user.userLogout().then(res => {
      lvToast.hideLoading()
      if (res.code == 200) {
        lvToast.showSuccess('已退出登录')
        this.data.logoutTimer = setTimeout(() => {
          app.clearAllStorageAndLogin()
          wx.reLaunch({
            url: `/pages/login/login`,
            complete: ()=> {
              this.setData({ isLogoutBtn: false })
              clearTimeout(this.data.logoutTimer)
            }
          })
        }, 1500)
      } else {
        this.setData({ isLogoutBtn: false })
        lvToast.showToast('退出失败，请重试')
      }
    })
  },
  // 选择tab状态
  checkNav(e) {
    let nav = e.currentTarget.dataset.val
    this.setData({
      checkNav: nav,
      scrollLeft: (nav-1) * 60
    })
    this.getList_fn()
  },
  // 跳转详情
  goDetail () {
    wx.navigateTo({
      url: '/pages/referralDetail/referralDetail'
    })
  },
  // 未登录就强制进入登录页
  mustGoLoginPage () {
    if (!app.globalData.loginStatus) {
      wx.reLaunch({
        url: `/pages/login/login`
      })
    }
  },
  // 初始化请求页面所有数据
  initPage () {
    lvToast.showLoading('加载中')
    this.setData({
      requestFlag: true,
      dataList: [],
      pageNo: 1
    })
    Promise.all([this.getListOrg(), this.getListData()]).then(res => {
      lvToast.hideLoading()
    }).catch(err => {
      console.log('promiseAll-err', err)
      lvToast.hideLoading()
      lvToast.showToast(err, '请求失败！')
    })
  },
  // 获取机构列表
  getListOrg () {
    return new Promise((resolve, reject) => {
      app.api.org.getAdminOrgs().then(res => {
        if (res.code == 200) {
          const pickerFirst = {
            text: '全部机构',
            code: ''
          }
          const orgData = [
            pickerFirst,  // 第一个元素是"全部机构"
            ...res.data.map(it => ({  // 展开映射后的数组
              text: it.organizationName,
              code: it.organizationCode
            }))
          ];

          this.setData({
            orgList: orgData
          })
          resolve(res.data)
        } else {
          console.log('【机构列表】：'+res.msg || '获取机构列表失败');
          reject('获取机构列表失败')
        }
      })
    })
  },
  // 获取列表数据
  getListData () {
    return new Promise((resolve, reject) => {
      const {chooseOrgCode, patientKw, checkNav, pageNo, pageSize} = this.data
      app.api.order.getOrderList({
        orgCode: chooseOrgCode,
        patientKw,
        status: checkNav,
        page: pageNo,
        pageNo,
        pageSize: pageSize
      }).then(res => {
        if (res.code == 200) {
          // 当已经没有数据返回时，不再继续请求
          if(res.data.list.length < this.data.pageSize){
            this.setData({
              requestFlag: false
            })
          }
          this.setData({
            dataList: [...this.data.dataList, ...res.data.list]
          })
          resolve(res.data)
        } else {
          console.log('【转诊记录列表】：'+ res.msg || '获取转诊记录列表失败')
          reject('获取转诊记录列表失败')
        }
      })
    })
  },
  // 提取公共请求列表方法
  getList_fn () {
    lvToast.showLoading('加载中')
    this.setData({
      requestFlag: true,
      dataList: [],
      pageNo: 1
    })
    this.getListData().then(() => {
      lvToast.hideLoading()
    }).catch((err)=> {
      lvToast.showToast(err, '转诊记录获取失败')
    })
  },
  // 打开选择机构
  chooseOrg () {
    this.setData({
      changeOrgPicker: true
    })
  },
  // 关闭选择机构
  orgCancel () {
    this.setData({
      changeOrgPicker: false
    })
  },
  // 选择机构
  orgConfirm (e) {
    // console.log(e)
    this.setData({
      changeOrgPicker: false,
      chooseOrgCode: e.detail.value.code,
      chooseOrgName: e.detail.value.text
    })
    this.getList_fn()
  },
  // 输入框内容变化时触发
  onInputChange(e) {
    const value = e.detail.value;
    this.setData({ patientKw: value });

    // 清除之前的定时器
    if (this.data.debounceTimer) {
      clearTimeout(this.data.debounceTimer);
    }
    // 设置新的定时器（2-3秒后执行请求）
    const timer = setTimeout(() => {
      this.getList_fn()
    }, 700)

    this.setData({ debounceTimer: timer });
  },
})